package com.zhdl.modules.autopick.service.impl;

import com.zhdl.modules.autopick.entity.CassettePosition;
import com.zhdl.modules.autopick.service.CmdHandleService;
import com.zhdl.modules.autopick.service.MotorActionService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Slf4j
@Service
public class MotorActionServiceImpl implements MotorActionService {

    CassettePosition cassettePosition = new CassettePosition();
    @Autowired
    private CmdHandleService cmdHandleService;

    /**
     * 电机获取状态
     */
    @Override
    public void motorInitGetStatus() {
        cmdHandleService.motorStatus();
        log.info("获取电机初始化状态");
    }

    /**
     * 电机找原点
     */
    @Override
    public void motorInitZero() {
        cmdHandleService.motorInit();
        log.info("电机找原点");
    }

    /**
     * 电机移动 - 1-4号漏斗
     *
     * @param distance 距离
     */
    @Override
    public void motorWriteRun(String address, int distance) {
        cmdHandleService.motorRun(address, distance);
        log.info("电机移动" + distance);
    }

    /**
     * 电机移动 - 第一个动作 - motorOneStep
     * 1:需动态设置110A 脉冲数 1101设置第0段开始 1105第1段结束     运动使能 3100设置 17  读取状态
     *
     * @param distance
     */
    @Override
    public void motorOneStep(int distance) {
        //运动使能 01
        cmdHandleService.motorStop();
        //设置运行需要的速度 -默认 第0到第1端运行
        cmdHandleService.motorRun("110C", distance);
        cmdHandleService.motorRunSpeed(500);
        //运动使能 17
        cmdHandleService.motorReadyAndRun();
    }

    /**
     * IO动作 - 推出拉杆
     */
    @Override
    public void motorGoOpenBar() {
        //运动使能 01
        cmdHandleService.motorStop();
        //气缸拉杆伸缩 -- 0011
        cmdHandleService.ioWriteDoubleCoil(6, true);
    }

    /**
     * 电机移动 - 第二个动作 - motorTwoStep
     * 2:读取到第1段结束 运动使能 3100设置 1  打开伸缩杆气缸 1101设置第1段开始 1105第2段结束  运动使能 3100设置 17 读取状态
     */
    @Override
    public void motorTwoStep(int distance) {
        cmdHandleService.motorRun("110C", distance);
        //设置运行需要的速度 -默认 第0到第1端运行
        cmdHandleService.motorRunSpeed(300);
        //运动使能 17
        cmdHandleService.motorReadyAndRun();
    }


    /**
     * 电机移动 - 第三个动作 - motorThreeStep
     * 3:读取到第2段结束 并且读到 盖子打开信号  运动使能 3100设置 1收回伸缩杆气缸 打开转运料斗电磁阀
     */
    @Override
    public void motorThreeStep() {
        //运动使能 01
        cmdHandleService.motorStop();

        //气缸收回拉杆 -- 0000
        cmdHandleService.ioWriteDoubleCoil(6, false);

        //气缸打开电磁阀 -- 1100
        cmdHandleService.ioWriteDoubleCoil(8, true);
    }

    /**
     * 电机移动 - 第四个动作 - motorFourStep
     * 4:等待固定时间料下完,关闭转运料斗电磁阀
     */
    @Override
    public void motorFourStep() {
        //等待延时10S，再关闭转运料斗电磁阀
        //IO关闭电磁阀 -- 0000
        cmdHandleService.ioWriteDoubleCoil(8, false);
    }

    /**
     * 电机移动 - 第五个动作 - motorFiveStep
     * 5:1101设置第2段开始 1105第3段结束     运动使能 3100设置 17  读取状态
     */
    @Override
    public void motorFiveStep(int distance) {
        //运动使能 01
        cmdHandleService.motorStop();

        cmdHandleService.motorRun("110C", distance);
        //设置运行需要的速度 -默认 第0到第1端运行
        cmdHandleService.motorRunSpeed(300);
        //运动使能 17
        cmdHandleService.motorReadyAndRun();
    }

    /**
     * IO动作 - 推出拉杆
     */
    @Override
    public void motorBackOpenBar() {
        //运动使能 01
        cmdHandleService.motorStop();
        //气缸拉杆收缩 -- 0011
        cmdHandleService.ioWriteDoubleCoil(6, true);
    }


    /**
     * 电机移动 - 第六个动作 - motorSixStep
     * 6:读到第三段位置结束 运动使能 3100设置 1 打开伸缩杆 1101设置第3段开始 1105第4段结束   运动使能 3100设置 17 读取状态
     */
    @Override
    public void motorSixStep(int distance) {
        cmdHandleService.motorRun("110C", distance);
        //设置运行需要的速度 -默认 第0到第1端运行
        cmdHandleService.motorRunSpeed(300);
        //运动使能 17
        cmdHandleService.motorReadyAndRun();
    }

    /**
     * IO动作 - 收回拉杆
     */
    @Override
    public void motorBackCloseBar() {
        //运动使能 01
        cmdHandleService.motorStop();
        //气缸拉杆伸缩 -- 0000
        cmdHandleService.ioWriteDoubleCoil(6, false);
    }

    /**
     * 电机移动 - 第七个动作 - motorSevenStep
     * 7:读取到第4段结束 并且读到盖子关闭信号  运动使能 3100设置 1, 需动态设置1120 脉冲数  1101设置第4段开始 1105第5段结束 运动使能 3100设置 17 读取状态
     */
    @Override
    public void motorSevenStep(int distance) {
        //设置第一段需要脉冲数 - 默认 15000
        cmdHandleService.motorRun("110C", distance);
        //设置运行需要的速度 -默认 第0到第1端运行
        cmdHandleService.motorRunSpeed(500);
        //运动使能 17
        cmdHandleService.motorReadyAndRun();
    }

    /**
     * 电机移动 - 第八个动作 - motorEightStep
     * 8:读取到第5段结束 并且读到原点信号 设置 运动使能 3100设置 0 标记电机完成流程
     */
    @Override
    public void motorEightStep() {
        //运动使能 01
//        cmdHandleService.motorStop();
        cmdHandleService.motorReady();
    }

    /*
        -----------------以下为东区电机运动--------------------
     */

    /**
     * 电机运动 - 初始化
     */
    @Override
    public void motorEasternInit() {
        cmdHandleService.motorEasternInit();
        log.info("东区电机-电机初始化完成");
    }

    /**
     * 电机运动 - 获取当前运动
     */
    @Override
    public void motorEasternStatus() {
        cmdHandleService.motorEasternStatus();
        log.info("东区电机-获取电机状态完成");
    }

    /**
     * 电机运动 - 打开料盒
     */
    @Override
    public void motorEasternOpenFunnel() {
        cmdHandleService.motorEasternRun(10000, 100);
        log.info("步科电机运动----打开盖子");
    }

    /**
     * 电机运动 - 关闭料盒
     */
    @Override
    public void motorEasternCloseFunnel() {
        cmdHandleService.motorEasternRun(0, 100);
        log.info("步科电机运动----关闭盖子");
    }

}
